#re模块中的match匹配
import re
from dataclasses import replace
from xml.dom.minidom import ProcessingInstruction

pattern='\d\.\d+'  #前面的\d是指0-9十进制数，中间的\.是转义字符成.，后面的+是指十进制数可出现1次或多次
s="I study python 3.11" #待匹配字符串
match=re.match(pattern,s,re.I)
#这个情况是为None的因为开头就不是数字，如果不在开头匹配就用search re.I忽略大小写
print(match)
s2="3.11 I study python 3.11"
match2=re.match(pattern,s2)
print(match2)

print("匹配值的起始位置",match2.start())
print("匹配值的结束位置",match2.end())  #他这个显示的数字是不包含的
print("匹配区间的位置元素",match2.span()) #出现的是一个元组，右边的数字不包含
print("待匹配的字符串",match2.string) #这个没有括号
print("匹配值的数据",match2.group())

#re模块中的search模式
#这里匹配的字符串是整个字符串进行匹配
s3="I study 2.7 python 3.11"
match3=re.search(pattern,s3)
print(match3) #这里匹配成功为第一个数字，后面的数字就不会出现

#re模块中的findall模式
list=re.findall(pattern,s3)  #这里就是将所有的数找出来
print(list)

#re模块中的sub模式,可以将pattern中的词进行替换
pattern2="黑客|破解|反爬" #|表示或者
s4="我想学习python，破解一些软件，可以无底线反爬吗？"
match4=re.sub(pattern2,"XXX",s4)
print(match4)

#re模块中的split模式，与字符串中的split一样分割
pattern3="[?|&]" #在出现了？或&的地方进行分割
s5="https://cn.bing.com/search?q=hsy&qs"
match5=re.split(pattern3,s5)
print(match5)